package com.ssy.lingxi.member.merchant.config;

import java.text.DecimalFormat;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 会员服务固定配置
 * @author 万宁
 * @version 2.0.0
 * @date 2020-07-31
 */
public class ServiceConfig {

    /**
     * 用户Token在客户端请求的Http Headers中的key
     */
    public static final String USER_TOKEN_HTTP_HEADERS_KEY = "token";

    /**
     * 用户登录来源在客户端请求的Http Headers中的key, 其值定义在UserLoginSourceEnum中
     */
    public static final String USER_LOGIN_SOURCE_HTTP_HEADERS_KEY = "source";

    /**
     * 用户登录站点Id在客户端请求的Http Headers中的key
     */
    public static final String USER_LOGIN_SITE_HTTP_HEADERS_KEY = "site";

    /**
     * 用户登录商城Id在客户端请求的Http Headers中的key
     */
    public static final String USER_LOGIN_SHOP_HTTP_HEADERS_KEY = "shopId";

    /**
     * 会员注册时，发送验证短信时在Redis中的Key前缀
     */
    public static final String MEMBER_REGISTER_CAPTCHA_IMG_REDIS_KEY_PREFIX = "MEMBER_REGISTER_CAPTCHA_IMG:phone:";

    /**
     * 会员注册时，发送验证短信时在Redis中的Key前缀
     */
    public static final String MEMBER_REGISTER_SMS_CODE_REDIS_KEY_PREFIX = "MEMBER_REGISTER_SMSCODE:phone:";

    /**
     * 根据手机号找回密码时，发送验证短信时在Redis中的Key前缀
     */
    public static final String RESET_PASSWORD_SMS_CODE_REDIS_KEY_PREFIX = "RESET_PSW_SMSCODE:phone:";

    /**
     * 根据邮箱找回密码时，发送验证短信时在Redis中的Key前缀
     */
    public static final String RESET_PASSWORD_MAIL_CODE_REDIS_KEY_PREFIX = "RESET_PSW_MAILCODE:email:";

    /**
     * 用户修改密码时，发送验证短信时在Redis中的Key前缀
     */
    public static final String CHANGE_PASSWORD_SMS_CODE_REDIS_KEY_PREFIX = "USER_UPD_PSW_SMSCODE:psw:";

    /**
     * 用户修改密码时，发送验证邮件时在Redis中的Key前缀
     */
    public static final String CHANGE_PASSWORD_MAIL_CODE_REDIS_KEY_PREFIX = "USER_UPD_PSW_MAILCODE:psw:";

    /**
     * 用户修改邮箱时，发送验证短信时在Redis中的Key前缀
     */
    public static final String CHANGE_EMAIL_SMS_CODE_REDIS_KEY_PREFIX = "USER_UPD_EMAIL_SMSCODE:email:";

    /**
     * 用户修改邮箱时，发送验证邮件时在Redis中的Key前缀
     */
    public static final String CHANGE_EMAIL_MAIL_CODE_REDIS_KEY_PREFIX = "USER_UPD_EMAIL_MAILCODE:email:";

    /**
     * 用户修改手机号时，发送验证短信时在Redis中的Key前缀
     */
    public static final String CHANGE_PHONE_SMS_CODE_REDIS_KEY_PREFIX = "USER_UPD_PHONE_SMSCODE:phone:";

    /**
     * 用户修改手机号时，发送验证短信时在Redis中的Key前缀
     */
    public static final String CHANGE_PHONE_MAIL_CODE_REDIS_KEY_PREFIX = "USER_UPD_PHONE_MAILCODE:phone:";

    /**
     * 用户修改支付密码时，发送验证短信时在Redis中的Key前缀
     */
    public static final String CHANGE_PAY_PASSWORD_SMS_CODE_REDIS_KEY_PREFIX = "USER_UPD_PAY_PSW_SMSCODE:pay:";

    /**
     * App - 用户手机号登录，发送验证短信时在Redis中的Key前缀
     */
    public static final String MOBILE_PHONE_LOGIN_SMS_CODE_REDIS_KEY_PREFIX = "USER_MOBILE_LOGIN:phone:";

    /**
     * App - 用户手机号登录，短信验证码在Redis中的缓存时间（分钟）
     */
    public static final long MOBILE_PHONE_LOGIN_SMS_CACHED_TIME_MINUTES = 1;


    /**
     * 用户登录移动客户端后，Token等信息在缓存中保存的时长（分钟）
     */
    public static final long MOBILE_LOGIN_TOKEN_EXPIRE_MINUTES = 15 * 24 * 60;

//    /**
//     * 平台后台的PAAS角色名称
//     */
//    public static final String PLATFORM_ROLE_NAME = "平台";

//    /**
//     * 平台角色的业务类型名称
//     */
//    public static final String PLATFORM_ROLE_BUSINESS_NAME = "平台运营";
//
//    /**
//     * 平台后台超级管理员默认所属会员名称
//     */
//    public static final String PLATFORM_SUPER_ADMIN_MEMBER_NAME = "平台";

    /**
     * 平台后台超级管理员默认账号
     */
    public static final String PLATFORM_SUPER_ADMIN_ACCOUNT = "admin";

    /**
     * 平台后台新增会员时，会员的默认密码
     */
    public static final  String PLATFORM_ADD_MEMBER_DEFAULT_PASSWORD = "888888";

//    /**
//     * 平台后台超级管理员用户的会员角色名称
//     */
//    public static final String PLATFORM_SUPER_ADMIN_MEMBER_ROLE_NAME = "超级管理员";
//
//    /**
//     * 平台后台超级管理员用户的职位名称
//     */
//    public static final String PLATFORM_SUPER_ADMIN_JOB_TITLE = "超级管理员";
//
//    /**
//     * 自动创建会员的管理员角色后，角色默认的描述
//     */
//    public static final String MEMBER_ADMIN_ROLE_DEFAULT_REMARK = "全部权限";

    /**
     * 区域代码中表示国家的code
     */
    public static final String COUNTRY_AREA_TOP_CODE = "100000";

//    /**
//     * 区域代码中表示国家的名称
//     */
//    public static final String COUNTRY_AREA_TOP_NAME = "全国";

    /**
     * 区域代码中省级区域的层级
     */
    public static final Integer COUNTRY_AREA_PROVINCE_LEVEL = 1;

    /**
     * 会员能力 - 新建渠道会员时，默认的渠道等级
     */
    public static final Integer MEMBER_CHANNEL_DEFAULT_LEVEL = 2;

//    /**
//     * 会员能力 - 新建渠道会员时，默认的渠道等级名称
//     */
//    public static final String MEMBER_CHANNEL_DEFAULT_LEVEL_TAG = "二级";

    /**
     * 默认的会员交易评价平均星级（总体满意度）：当会员没有被交易评价时，默认显示的总体满意度
     */
    public static final int DEFAULT_TRADE_COMMENT_STAR = 5;

    /**
     * Web页面默认时间格式
     */
    public static final DateTimeFormatter DEFAULT_DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    /**
     * APP默认时间格式
     */
    public static final DateTimeFormatter APP_DEFAULT_DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");

    /**
     * 会员未通过审核时，可以访问的前端页面UrlCode列表
     */
    public static final List<String> MEMBER_MAIN_WEB_PAGE_CODES = Stream.of("/memberCenter/home").collect(Collectors.toList());

    /**
     * 会员未通过审核时，可以访问的App端页面UrlCode列表
     */
    public static final List<String> MEMBER_MAIN_APP_PAGE_CODES = Stream.of("").collect(Collectors.toList());

    /**
     * 计算登录等级积分的时间间隔（分钟），离上一次登录超过这个时间限制，才计算登录积分
     */
    public static final long LOGIN_LEVEL_SCORE_CALCULATION_INTERVAL_MINUTES = 120;

    /**
     * 用于会员注册时手机号码、邮箱的幂等校验
     */
    public static final long REGISTER_PHONE_EMAIL_CACHE_SECONDS = 60;

    /**
     * 平台会员审核工作流的ProcessKey
     */
    public static final String PLATFORM_VALIDATE_PROCESS_KEY = "platform_member_verify";

    /**
     * “无需审核”的平台会员审核流程的Key
     */
    public static final String EMPTY_PLATFORM_VALIDATE_PROCESS_KEY = "platform_member_directly";

    /**
     * “无需审核”的会员入库流程的Key
     */
    public static final String EMPTY_DEPOSITORY_PROCESS_KEY = "member_depository_directly";

    /**
     * 会员能力 - 会员考评工作流的processKey
     */
    public static final String MEMBER_APPRAISAL_PROCESS_KEY = "member_appraisal_verify";

    /**
     * 会员能力 - 会员整改工作流的processKey
     */
    public static final String MEMBER_RECTIFY_PROCESS_KEY = "member_rectify_verify_ext";

    /**
     * 保留两位小数，小数部分是0的话保留整数，小数第一位不是0的话则保留一位
     */
    public static final DecimalFormat BIG_DECIMAL_FORMAT  = new DecimalFormat("###.##");

    /**
     * 交易评价时间编码(paas平台数据)
     */
    public static final String ORDER_AUTO_COMMENT_PARAMETER_CODE = "A04";

    /**
     * 商家审核评价内容编码(paas平台数据)
     */
    public static final String ORDER_COMMENT_SHOW_PARAMETER_CODE = "A07";

    /**
     * 定时模块回调自动评价订单
     */
    public static final String ORDER_COMMENT_CALLBACK_URL = "/member/comment/schedule/callback/autoComment";
    /**
     * 会员服务
     */
    public static final String MERCHANT_MEMBER_SERVICE = "merchant-member-service";
    /**
     * 自动评价订单自定义参数
     */
    public static final String ORDER_COMMENT_ATTR = "tradeType";
    /**
     * 授权二维码标识url参数
     */
    public static final String QR_CODE_SIGN_TEMPLATE = "?codeSign=lxCodeSign&authCode={}";
}
